package com.my.common.utils;

import com.my.common.utils.spring.SpringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.i18n.LocaleContextHolder;

/**
 * 获取i18n资源文件
 * 
 * @author ruoyi
 */
public class MessageUtils
{
     private static final Logger log = LoggerFactory.getLogger(MessageUtils.class);
    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public static String message(String code, Object... args)
    {
        try {
            MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
            if (messageSource != null) {
                try {
                    // 尝试使用当前语言环境获取消息
                    return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
                } catch (NoSuchMessageException e1) {
                    log.debug("消息 [{}] 在当前语言环境中未找到，尝试使用默认语言环境", code);
                    try {
                        // 尝试使用默认语言环境（中文）获取消息
                        return messageSource.getMessage(code, args, java.util.Locale.SIMPLIFIED_CHINESE);
                    } catch (NoSuchMessageException e2) {
                        log.warn("消息 [{}] 在默认语言环境中也未找到，返回消息键作为默认值", code);
                        // 返回消息键作为默认值
                        return code;
                    }
                }
            } else {
                log.error("MessageSource Bean未找到，无法进行消息解析");
                return code;
            }
        } catch (Exception e) {
            log.error("获取消息资源时发生异常，消息键: {}", code, e);
            return code;
        }
    }
}
